package com.winner.adapter_pattern;

/**
 * 接口适配器模式
 *
 * @Author wangxinle5
 * @since 2024-04-23
 */

//Target 是目标接口，包含了多个方法。
//Adapter 是接口适配器抽象类，它实现了 Target 接口，并提供了所有方法的默认实现。
//ConcreteAdapter 是具体的适配器类，它继承了 Adapter 并选择性地覆盖了其中的某些方法。
//Client 是客户端类，它创建了适配器实例，并调用了适配器的方法。
//通过接口适配器模式，可以避免创建一个过多实现的类，提高代码的可维护性和灵活性。
// // 客户端类
public class InterfaceClient {
    public void main(String[] args) {
        // 创建适配器实例
        Target adapter = new ConcreteAdapter();

        // 调用适配器方法
        adapter.method1(); // 默认实现
        adapter.method2(); // 覆盖了默认实现
        adapter.method3(); // 默认实现
    }

    // 目标接口
    interface Target {
        void method1();
        void method2();
        void method3();
    }

    // 接口适配器抽象类
    abstract class Adapter implements Target {
        @Override
        public void method1() {
            // 默认实现
        }

        @Override
        public void method2() {
            // 默认实现
        }

        @Override
        public void method3() {
            // 默认实现
        }
    }

    // 具体的适配器类
     class ConcreteAdapter extends Adapter {
        @Override
        public void method2() {
            System.out.println("ConcreteAdapter: method2");
        }
    }
}
